.. talimat documentation master file, created by
   sphinx-quickstart on Mon Jun 24 14:53:40 2019.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

talimat sistemi
===================================

.. toctree::
   :maxdepth: 2
   :caption: Contents:

talimat dosyaları mps'in paketleri kurması için gerekli bilgileri içeren bir .ini dosyasıdır.


Talimat dizini
-----------------
Talimat dizinleri paket ile ilişkili talimat dosyasını ve kurulum aşamasında gerekebilecek
bir çok ayrı dosyayı barındırır.

::

    gcc#9.1.0-1/
    ├── derle.sh
    ├── kurkos.sh
    ├── pakur.sh
    └── talimat


\*.sh dosyaları
~~~~~~~~~~~~~~~~~~~~~
Talimat işlemleri için ayrı script dosyları hazırlanıp bunlar talimat dosyası içinden
'dosya' anahtar kelimesi ile çağırılabilir. 

::

    [derle]
    dosya = derle.sh
    
    [pakur]
    dosya = pakur.sh

Bu dosyların 'derle' ve 'pakur' altında kullanılması halinde önerilen isimlendirme 'derle' için
'derle.sh', 'pakur' için ise 'pakur.sh' şeklindedir.

Koşuk betikleri
~~~~~~~~~~~~~~~~~~~~~
Koşuk betikleri talimat dizininde saklanabilir. Bunlar mps tarafından otomatik olarak algılanır ve
kullanılır.

| **kurkos.sh**
|   Paket kurulduktan sonra çalışacak betik.
| **koskur.sh**
|   Paket kurulmadan önce çalışacak betik.
| **silkos.sh**
|   Paket silindikten sonra çalışacak betik.
| **kossil.sh**
|   Paket silinmeden önce çalışacak betik.


Yama dosyaları
~~~~~~~~~~~~~~~~~~~~~
Yama dosyaları talimat dizininde saklanabilir. Bu durumda yapılması gereken 'dosya' anahtarı ile
dosyayı talimat'a eklemek ve 'yama' anahtarı ile ilişkili yamayı belirtmektir.
Daha fazla bilgi için dosya formatını inceleyin.

::

    lua#5.3.5-1/
    ├── derle.sh
    ├── liblua.so.patch
    ├── lua.pc
    ├── pakur.sh
    └── talimat

::

    [kaynak]
    gz      = https://www.lua.org/ftp
    dosya   = liblua.so.patch
    dosya   = lua.pc
    
    [derle]
    yama    = 2
    ...


libgerekler ve pktlibler
~~~~~~~~~~~~~~~~~~~~~~~~~~
libgerekler dosyası, paketin hangi kütüphanelere ihtiyacı olduğunu belirtir.

Örneğin aşağıda python paketinin 3.7.3'üncü sürümü için gereken kütüphaneler listelenmiştir.
Bunlar libgerekler dosyasında saklanır.

::

    libdl.so.2
    libpython3.7m.so.1.0
    libpthread.so.0
    libc.so.6
    libuuid.so.1
    libm.so.6
    libexpat.so.1
    liblzma.so.5
    libbz2.so.1.0
    libz.so.1
    libpanelw.so.6
    libncursesw.so.6
    libgdbm.so.6
    libgdbm_compat.so.4
    libsqlite3.so.0
    libssl.so.1.1
    libcrypto.so.1.1
    libcrypt.so.1
    libreadline.so.8
    libutil.so.1


pktlibler ise paketin sisteme sunduguğu kütüphaneleri belirtir.

Aşağıda ise aynı paketinin sisteme sunduğu kütüphanlere listenmiştir.
Bunlar da pktlibler dosyasında saklanır.

::

    libpython3.so 
    libpython3.7m.so.1.0
    libpython3.7m.so





Dosya formatı
-----------------

[paket]
~~~~~~~~~~~~~~~~~
| **tanim**
|   Paketin açıklaması.
| **paketci**
|   Paketçilerin isimleri.
| **grup**
|   Paketin grubu. 
|   Gruplarlar belirlenirken sistemde önceden tanımlanan gruplar 
    kullanılmalıdır, bunlar 'mps gruplar' komutu ile öğrenilebilir.
| **url**
|   Paketin web sayfası

[gerek]
~~~~~~~~~~~~~~~~~
| **derleme**
|   Paketin derlenmesi için gerekenler
| **calisma**
|   Paketin çalışması için gerekenler

[kaynak]
~~~~~~~~~~~~~~~~~
| **github**
|   Verilen kaynak GitHub için 'kullanıcıadı/repoismi' olmalıdır.
    Bu durumda mps'nin kullandığı tam url ise 'github.com/kullanıcıadı/repoismi' olacaktır.
| **gz,xz,bz2**
|   Verilen kaynağın sonuna paket ismini belirli bir formata çevirerek ekler ve kullanır.
|   Kullanılan tam format, girdi 'url' ise 'url/$isim-surum.tar.[gz|xz|bz2]' olacaktır.
| **dosya**
|   Paketin talimat dizinindeki bir betik dosyası.

| Bunların dışında herhangi bir alfanumerik kelime kullanılabilir. Ancak önerilen kullanım 
    herhangi bir pozitif sayı veya 'url' anahtar kelimesidir.

[sha256] ve [sha512]
~~~~~~~~~~~~~~~~~~~~~~
| **1,2,3,4...**
|   Kaynak dosyaları için sha anahtarlarını belirtir.
|   Numara, kaynağın [kaynak] altındaki sırasını belirtir.


[derle]
~~~~~~~~~~~~~~~~~
| **dosya**
|   Paketin talimat dizinindeki bir betik dosyası.
| **tip**
|   Paketin derlenme tipi.
| **betik**
|   Çalıştırılacak betik komutu.
| **yama**
|   Yama dosyasının [kaynak] altındaki sırası.


[pakur]
~~~~~~~~~~~~~~~~~
| **dosya**
|   Paketin talimat dizinindeki bir betik dosyası.
| **tip**
|   Paketin kurulma tipi.
| **betik**
|   Çalıştırılacak betik komutu.
| **yama**
|   Yama dosyasının [kaynak] altındaki sırası.
| **servis**
|   Paketin içine kurulacak servis.
|   Bu dosya /usr/milis/ayarlar altında bulunmak zorundadır.



Değişkenler
-----------------
| Talimat dizininde paketler belirli bir formata göre isimlendirilir, bu format
| 'isim#sürüm-devir'
| şeklindedir ve buradaki değerler değişkenler olarak kullanılabilir.

| **$isim**
|   Paketin ismi.
| **$surum**
|   Paketin sürümü.
| **$devir**
|   Paketin devri.

[paket] bloğunun altındaki her anahtar değişken olarak kullanılabilir.

Tipler
-----------------
Tipler, betik yazmak yerine daha sade bir talimat için kullanılabilir.

Derleme tipleri
~~~~~~~~~~~~~~~~~
gnu
^^^^^^^^^^^^^^^^
gnu tipi derleme aşağıdaki komutları çalıştırır.

:: 
    
    ./configure $confopt && make

Ek konfigürasyon yapmak için 'tip' anahtarında önce 'ekconf' anahtarı kullanılabilir.
Anahtarın değeri gerekli komutlar çağrılımadan önce $confopt değerine atanacaktır.

cmake
^^^^^^^^^^^^^^^^
cmake tipi derleme aşağıdaki komutları çalıştırır.

:: 
    
    cmake ./ && make



Paket kurma tipleri
~~~~~~~~~~~~~~~~~~~~
gnu
^^^^^^^^^^^^^^^^
gnu tipi paket kurma aşağıdaki komutları çalıştırır.

:: 
    
    make DESTDIR=$PKG install

